function [ref_x,ref_y,ref_theta,ref_v] = plane_path_generation(N,dt)
% This function
% Name          :plane_path_generation
% Descriptions  :使用多项式拟合给定的路径点生成参考轨迹
% Argument(s)   :N为预测步长,用于扩充参考序列长度;dt为控制周期,用于计算参考速度
% Return(s)     :目标轨迹，分解为小车平面坐标系xy轴平面上的ref_x,ref_y和ref_theta,并根据dt计算相邻点间参考速度ref_v
% Author        :LHP, on 04/09/2024
%% 路径规划

% 生成圆的参数
radius  = 2;                                    % 第一个圆的半径
center1 = [-2, 0];                              % 第一个圆的中心在坐标轴左边
center2 = [2, 0];                               % 第二个圆的中心在坐标轴右边

ref_x = [];
ref_y = [];
ref_theta = [];

% 第一段半圆
theta1 = linspace(0, pi, 50);                   % 生成圆的角度
adjust = pi;
[x_seq,y_seq,theta_seq] = path_generation(theta1,center1,radius,adjust);
ref_x = [ref_x,x_seq];ref_y = [ref_y,y_seq];ref_theta = [ref_theta,theta_seq];

% 第二段半圆
theta1 = linspace(pi, 2*pi, 50);                % 生成圆的角度
adjust = 0;
[x_seq,y_seq,theta_seq] = path_generation(theta1,center1,radius,adjust);
ref_x = [ref_x,x_seq];ref_y = [ref_y,y_seq];ref_theta = [ref_theta,theta_seq];
x_sup = [ref_x(1:N)];y_sup = [ref_y(1:N)];theta_sup = [ref_theta(1:N)];

% 第三段半圆
theta2 = linspace(pi, 0, 50);                   % 生成圆的角度
adjust = 0;
[x_seq,y_seq,theta_seq] = path_generation(theta2,center2,radius,adjust);
ref_x = [ref_x,x_seq];ref_y = [ref_y,y_seq];ref_theta = [ref_theta,theta_seq];

% 第四段半圆
theta2 = linspace(0, -pi, 50);                  % 生成圆的角度
adjust = -pi;
[x_seq,y_seq,theta_seq] = path_generation(theta2,center2,radius,adjust);
ref_x = [ref_x,x_seq];ref_y = [ref_y,y_seq];ref_theta = [ref_theta,theta_seq];

% 第五段半圆
ref_x = [ref_x,x_sup];
ref_y = [ref_y,y_sup];
ref_theta = [ref_theta,theta_sup];

% 偏航角跳变处理
ref_theta = angleseq_bound(ref_theta);

% 计算参考速度
ref_v = calc_vel(ref_x, ref_y, dt);
end

